|
Date : 11 janvier 1991 : incomplet 17 f�vrier 1991 : rien... 21 juin 1991 : �a y est ! Protection : MOT DE PASSE Programme : LIGHT SPEED Outils : PANO_AT / SOFT-ICE Fichier : LIGHSPD.OVL Temps pass� : 15 minutes / 4 heures / 2 heures Soci�t� : MICROPROSE Divers : PERISCOPE � 09F9:0000 ( DOS V5.00 ) Origine : INDONESIE Num�ro : 097 Jusqu'� ces derniers temps cette soci�t� �tait sp�cialis�e dans la protection type DISQUETTE CLEF, elle vient de se mettre � la protection "SOFT". Erreur fatale ! J'ai voulu voir si leur protection �tait � la hauteur de celle d'ACCOLADE ou de SIERRA mais loin de l�... Une INT 21 est g�n�r�e lorsqu'on appuie sur la touche ENTER en 2718:023D mais je m'apper�ois que je suis d�j� trop loin dans le programme...et la sortie vers le DOS est in�vitable. J'appuie donc manuellement sur le switch g�n�rant la NMI au moment de la demande de mot de passe. Je d�roule le programme au pas � pas et je tombe sur un CMP AX,000D en 28D4:00B4. Je r�ponds comme si j'avais appuy� sur la touche ENTER et je passe un RETF en 28D4:00C1. Au premier test en 28D4:0257 j'infl�chi le cours normal des choses et je fais un essai... 28D4:0249 50 PUSH AX 28D4:024A 9A9C4CBF1F CALL 1FBF:4C9C 28D4:024F 83C402 ADD SP,+02 28D4:0252 833E384C00 CMP WORD PTR [4C38],+00 28D4:0257 7513 JNZ 026C 28D4:0259 FF76EA PUSH [BP-16] 28D4:025C 8D46D7 LEA AX,[BP-29] 28D4:025F 50 PUSH AX 28D4:0260 9A3E48BF1F CALL 1FBF:483E 28D4:0265 83C404 ADD SP,+04 28D4:0268 0BC0 OR AX,AX Avec PCTOOLS chercher : 4C007513FF76 et modifier : ....EB...... Date : 17 f�vrier 1991 Temps : 4 heures d�j� et ce n'est pas fini... Je retire ce que j'ai dit, les concepteurs de la protection de LIGHTSPEED sont � la hauteur de SIERRA et d'ACCOLADE car le jeu est toujours prot�g� et m�me tr�s bien prot�g�. Le jeu se plante lorsque l'on appuie sur la touche S. Je recharge PERISCOPE pour retrouver ma routine pr�c�dente mais il y a eu des modifications dans mon config.sys car il se charge � 0B23 au lieu de 09F9. Il y a 2 solutions pour retrouver la routine avec un segment CS different: 1) faire une recherche de la routine HEXA avec PCTOOLS et y placer un octet CC. ( c'est une INT 3 et PERISCOPE s'affiche d�s qu'il la rencontre ) 2) effectuer le calcul suivant: Valeur de l'ancien CS + la difference actuelle de chargement de PERISCOPE, ce qui donne ( 28D4h + ( 0B23h - 09F9h )) = 29FEh Et on retrouve la routine. J'essaie tout ce qu'il est possible d'essayer en vain. Une routine CALL 20E9:483E teste les caract�res entr�s avec ceux qui sont en m�moire. Mais m�me si l'on force le r�sultat de la comparaison le soft se plante toujours. Instructions utilis�es pour la comparaison: REPNZ SCANB : tant que le r�sultat est # de zero on SCAN Byte par Byte. REPNZ CMPSB : " " on CoMPare le String Byte par Byte en faisant une soustraction. ( SCAN ne d�truit pas les octets au contraire de CMP ) J'ai envie de laisser tomber car je suis a bout de moyen, je regarde d'ou la chaine est compar�e: elle est en clair en 3589:F0E2 voir ci-dessous. J'essaie de voir d'ou elle vient puisqu'elle est cod�e ( on ne trouve rien dans aucun fichier du jeu ). Je place la carte PANO en �criture sur le SEGMENT:offset de la chaine source et je relance le soft. 3589:F0E2 75 6E 6B 6E 6F 77-6E 00 00 00 00 00 00 00 unknown....... * 0001 Lines Of 00 Skipped * Je trouve l'adresse suivante 29FE:0304 avec la carte. Les octets sont bien cod�s mais en examinant la routine il suffit de faire un NEG pour les avoirs en clair. NEG 91h = NEG 1001 0001 = 0110 1110 + 1 = 68 = 'h' d es:304 29FE:0304 91 8C 98 9B-8E 97 92 99 00 9B CF 9F ..........O. 29FE:0310 99 9F 97 92 8D 8C 00 8C-CF 8B 92 9B 8E 8E 97 92 ........O....... 29FE:0320 99 94 87 00 89 CF 97 92-8C 9B 8E 8D 8C 9B 94 94 .....O.......... 29FE:0330 9F 8E 00 EE CE 93 91 8E-9B 00 EC CE 9A 97 99 98 ...nN.....lN.... 29FE:0340 8C 9B 8E 8D 00 DE CE 8E-9B 9F 94 94 87 00 DC CE .....^N.......\N Et ce qui ne gate rien ces octets sont enfins en clair dans le fichier LIGHTSPD.OVL sous le format suivant XX XX YY YY YY YY.... 00 Les octets XX repr�sentent la page, paragraphe, et ligne ou se trouve le nom dans la doc. Les octets YY correspondent a chaque caract�re du mot et l'octet 00 sert de d�limiteur. J'ai essay� de mettre la m�me valeur partout ( des 00 ) le soft affiche page 0, ligne 0, paragraphe 0, et ne donne plus le premier caract�re. En appuyant sur la touche return cel� fonctionne jusqu'� la touche S ! Je vais r�essayer car j'ai du sauvagement enlever des octets utiles. Si j'arrive simplement � lui faire afficher le m�me code je serais satisfait. Ci-dessous le secteur dans son format original tel que le donne PCTOOLS: lightspd.ovl SECTEUR : 047 DEC HEX 000 000 8D 91 00 DE DE 8D 9D 8E 9B 9B 92 00 D9 DE 9A 94 �� �ލ����� �ޚ� 016 010 9F 8D 98 97 92 99 00 EF DD 9E 94 9F 8D 8C 9B 8E ������ �ݞ��� 032 020 00 CC DD 90 91 8E 8C 97 91 92 8D 00 CB DD 8C 8E �ݐ���� ��� 048 030 9F 97 94 9E 94 9F 86 9B 8E 00 CA DD 9C 9F 93 9F ��������� �ݜ��� 064 040 99 9B 9C 00 C9 DD 8E 9B 9F 9C 91 8B 8C 00 ED DC ��� �ݎ������ �� 080 050 9F 94 94 00 DD DC 9B 9F 9D 98 00 D8 DC 9C 9B 9A ��� �ܛ��� �ܜ�� 096 060 9B 92 8D 97 8A 9B 00 CC DC 9D 91 92 8A 9B 8E 8C ����� �ܝ��蛎� 112 070 9B 8E 8D 00 CB DC 8C 8B 8E 9E 97 92 9B 8D 00 B8 ��� ������� � 128 080 DC 99 9B 92 9B 8E 9F 94 00 A7 DC 89 97 8C 98 91 ܙ������ �܉� 144 090 8B 8C 00 EE CF 8D 90 98 9B 8E 97 9D 9F 94 00 EC �� �ύ�������� � 160 0A0 CF 9F 9E 8D 91 8E 9E 9B 9C 00 EA CF 9B 9A 9A 9B ϟ������� �ϛ��� 176 0B0 9D 8C 00 E7 CF 97 93 93 8B 92 9B 00 DD CF 94 9F �� �ϗ�� �ϔ� 192 0C0 8E 99 9B 00 CC CF 99 8B 97 9C 9B 9C 00 CB CF 8A ��� �ϙ�� ��� 208 0D0 97 9B 89 9B 8E 00 B8 CF 9B 8A 9B 92 00 AE CF 93 ����� �ϛ蛒 ��� 224 0E0 9B 9D 98 9F 92 97 8D 93 00 AC CF 98 91 89 9B 8A �������� �Ϙ���� 240 0F0 9B 8E 00 AB CF 8D 91 93 9B 8C 97 93 9B 8D 00 A9 �� �ύ������� � Ici le m�me secteur "pass� � la moulinette" par mon HEXUTIL.EXE on voit clairement les diff�rents mots de passe: DEC HEX 000 000 73 6F 00 22 22 73 63 72 65 65 6E 00 27 22 66 6C so ""screen '"fl 016 010 61 73 68 69 6E 67 00 11 23 62 6C 61 73 74 65 72 ashing #blaster 032 020 00 34 23 70 6F 72 74 69 6F 6E 73 00 35 23 74 72 4#portions 5#tr 048 030 61 69 6C 62 6C 61 7A 65 72 00 36 23 64 61 6D 61 ailblazer 6#dama 064 040 67 65 64 00 37 23 72 65 61 64 6F 75 74 00 13 24 ged 7#readout .$ 080 050 61 6C 6C 00 23 24 65 61 63 68 00 28 24 64 65 66 all #$each ($def 096 060 65 6E 73 69 76 65 00 34 24 63 6F 6E 76 65 72 74 ensive 4$convert 112 070 65 72 73 00 35 24 74 75 72 62 69 6E 65 73 00 48 ers 5$turbines H 128 080 24 67 65 6E 65 72 61 6C 00 59 24 77 69 74 68 6F $general Y$witho 144 090 75 74 00 12 31 73 70 68 65 72 69 63 61 6C 00 14 ut 1spherical 160 0A0 31 61 62 73 6F 72 62 65 64 00 16 31 65 66 66 65 1absorbed 1effe 176 0B0 63 74 00 19 31 69 6D 6D 75 6E 65 00 23 31 6C 61 ct 1immune #1la 192 0C0 72 67 65 00 34 31 67 75 69 64 65 64 00 35 31 76 rge 41guided 51v 208 0D0 69 65 77 65 72 00 48 31 65 76 65 6E 00 52 31 6D iewer H1even R1m 224 0E0 65 63 68 61 6E 69 73 6D 00 54 31 68 6F 77 65 76 echanism T1howev 240 0F0 65 72 00 55 31 73 6F 6D 65 74 69 6D 65 73 00 57 er U1sometimes W Restore Help Edit Neg Xor NOt +/- SP Secteur Print ESC 21 juin 1991 L'approche du probl�me comme montr� ci-dessus peut fonctionner dans certain cas, mais ayant entre temps mis la main sur un d�buggeur de course, je d�cide de m'y r�attaquer en appelant SOFT-ICE lors du blocage du jeu. Malheureusement ( et c'est la premi�re fois qu'il me laisse tomber bien qu'il soit en mode prot�g� ) il ne r�pond plus ! Donc je d�cide de faire du pas a pas pour voir o� cel� se passe. J'aurais pu d�rouler l'entr� des caract�res un a un pour voir quel genre de test le programme effectue, j'ai essay�; c'est inextricable. Il faut avoir un peu de patience car avant d'arriver � l'endroit fatidique il faut descendre un alien puis apr�s cel� faire S. J'arrive jusque l� et j'active SOFT-ICE auquel je fais faire des F10 � n'en plus finir. Je d�cide de faire des F7 ( fonction HERE ) ce qui m'affiche SOFT-ICE toute les fois qu'il passe par l�. Au bout d'un certain nombre de fois l'�cran se fige. Heureusement j'ai relev� l'endroit o� cel� se produit: 2150:0E45 9A0200B60C CALL 0CB6:0002 Pour y aller directement je fais un : BPM 2150:0E45 X Et je reboote tout en gardant mes param�tres dans SOFT-ICE. Puis � partir de la premi�re apparition de SOFT-ICE je fais du F7 et je compte le nombre de fois que le programme tourne avant de se viander: 91 fois ! Je modifie mon BPM pour qu'il ne s'affiche qu'� la 90 �me fois: BPE 0 BPM 2150:0E45 X C90 Et l� je me plante car le 90 entr� est en d�cimal, il faut taper BASE 10 auparavant et repasser en BASE 16 pour que finalement le compteur du point d'arr�t accepte bien la valeur HEXA de 90. Je relance le jeu et j'appuie sur S; SOFT-ICE s'affiche et je continue � pied... Je m'aper�ois que je quitte cette boucle qui est appel�e 91 fois pour arriver � une s�rie de sauts. Avant de continuer je jette un oeil sur la suite du listing et l� je d�couvre une chose curieuse: 2150:0905 7407 JZ 090E ��Ŀ 2150:0907 9A021A461D CALL 1D46:1A02 <�Ŀ� 2150:090C EB09 JMP 0907 ��ٳ 2150:090E A14B9F MOV AX,[9F4B] <���� Le saut en 905 contourne un CALL qui est appel� ind�finiment ! Je remplace le saut en 905 par un JMP apr�s le CALL et mon jeu fonctionne ( enfin ). Je fais la modif avec PCTOOLS et j'essaye; �a marche... une fois... et cel� se replante. Ce saut est peut-�tre appel� par une autre routine. Je d�cide de "nettoyer" enti�rement ces 7 octets par des NOP pour voir. Et bien le jeu se plante toujours mais � un autre endroit. L'id�e me vient de regarder avec PCTOOLS si cette chaine n'existe pas ailleurs dans le fichier. Et je vous le donne en mille ; elle existe 13 fois !!! Je me mets au travail en nettoyant tout ce qui traine et je relance le jeu une fois de plus. Cette fois c'est OK. Avec PCTOOLS chercher 4C007513FF76 et remplacer 75 par EB Premi�re modification du mois de janvier 1991. Puis chercher 13 fois de suite la chaine : 9A021A2011EBF9 et l'�craser par des 90. FREDDY |